﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace AcademiaInteligenteData.DAL
{
    class DaoModalidade : DaoConnection
    {
        public void InserirModalidade(Modalidade modalidade)
        {
            string insertModalidade = "ai_sp_inserirModalidade";
            List<SqlParameter> parametros = new List<SqlParameter>();

            parametros.Add(new SqlParameter("@id", modalidade.Id));
            parametros[0].Direction = System.Data.ParameterDirection.InputOutput;
            parametros.Add(new SqlParameter("@descricao", modalidade.Descricao));
            parametros.Add(new SqlParameter("@id_academia", modalidade.Academia.Id));
            parametros.Add(new SqlParameter("@id_tipo_modalidade", modalidade.TipoModalidade.Id));
            parametros.Add(new SqlParameter("@ativo", true));
            parametros.Add(new SqlParameter("@data_inclusao", DateTime.Now));
            Executar(insertModalidade, true, parametros);
            modalidade.Id = Convert.ToInt32(parametros[0].Value);
        }
        public void AlterarModalidade(Modalidade modalidade)
        {
            string alterarModalidade = "ai_sp_alterarModalidade";
            List<SqlParameter> parametros = new List<SqlParameter>();

            parametros.Add(new SqlParameter("@id", modalidade.Id));
            parametros.Add(new SqlParameter("@descricao", modalidade.Descricao));
            parametros.Add(new SqlParameter("@id_academia", modalidade.Academia.Id));
            parametros.Add(new SqlParameter("@id_tipo_modalidade", modalidade.TipoModalidade.Id));
            parametros.Add(new SqlParameter("@ativo", modalidade.Ativo));

            Executar(alterarModalidade, true, parametros);
        }
        public void ExcluirModalidadePorID(int id)
        {
            string excluirModalidade = "ai_sp_excluirModalidade";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id", id));
            Executar(excluirModalidade, true, parametros);
        }
        public Modalidade SelecionarModalidadePorID(int id)
        {
            string selecionaModalidade = "ai_sp_selecionarModalidadePorID";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id", id));
            DataSet reader = Selecionar(selecionaModalidade, true, parametros);
            int i = 0;
            Modalidade modalidade = new Modalidade();
            modalidade.Descricao = Convert.ToString(reader.Tables[0].Rows[i]["descricao"]);
            modalidade.Academia.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id_academia"]);
            modalidade.TipoModalidade.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id_tipo_modalidade"]);

            modalidade.Id = id;
            return modalidade;
        }

        internal List<Modalidade> ListarModalidades()
        {
            string selecionaModalidade = "ai_sp_listarModalidade";
            List<SqlParameter> parametros = new List<SqlParameter>();
            DataSet reader = Selecionar(selecionaModalidade, true, parametros);
            List<Modalidade> modalidades = new List<Modalidade>();
            for (int i = 0; i < reader.Tables[0].Rows.Count; i++)
            {
                Modalidade modalidade = new Modalidade();
                modalidade.Descricao = Convert.ToString(reader.Tables[0].Rows[i]["descricao"]);
                modalidade.Academia.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id_academia"]);
                modalidade.TipoModalidade.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id_tipo_modalidade"]);
                modalidade.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id"]);
                modalidades.Add(modalidade);
            }
            return modalidades;
        }
        internal List<Modalidade> SelecionarModalidadePorAcademia(int idAcademia, int idFuncionario = 0)
        {
            string selecionaModalidade = "ai_sp_selecionarModalidadePorAcademia";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id_academia", idAcademia));
            parametros.Add(new SqlParameter("@id_funcionario", idFuncionario));
            DataSet reader = Selecionar(selecionaModalidade, true, parametros);
            List<Modalidade> modalidades = new List<Modalidade>();
            int idModalidadeAtual = 0;
            for (int i = 0; i < reader.Tables[0].Rows.Count; i++)
            {
                Modalidade modalidade = new Modalidade();
                modalidade.Academia.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id_academia"]);
                modalidade.Descricao = Convert.ToString(reader.Tables[0].Rows[i]["descricao"]);
                modalidade.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id"]);
                idModalidadeAtual = Convert.ToInt32(reader.Tables[0].Rows[i]["id"]);
                while (reader.Tables[0].Rows.Count>i && Convert.ToInt32(reader.Tables[0].Rows[i]["id"]) == idModalidadeAtual)
                {
                    if (reader.Tables[0].Rows[i]["id_Modalidade_Instrutor"] != DBNull.Value)
                        modalidade.Funcionario.Add(new Funcionario() { Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id_Modalidade_Instrutor"]) });
                    i++;
                }
                i--;
                modalidades.Add(modalidade);

            }
            return modalidades;
        }
    }
}
